package cn.itcast.web.controller.cargo;

import cn.itcast.domain.cargo.Export;
import cn.itcast.domain.cargo.ExportProduct;
import cn.itcast.domain.cargo.ExportProductExample;
import cn.itcast.domain.system.User;
import cn.itcast.service.cargo.ExportProductService;
import cn.itcast.service.cargo.ExportService;
import cn.itcast.utils.BeanMapUtils;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/cargo/export")
public class PdfController extends BaseController {

    @Reference
    private ExportService exportService;

    @Reference
    private ExportProductService exportProductService;

    /**
     * 完成报运单PDF文件创建
     *  请求连接：/exportPdf.do?id=3653cf35-da5a-4e85-b1dd-10461ba19152
     *  参数：报运单id
     *      a.查询数据
     *      b.jasper生成pdf文件
     */
    @RequestMapping("/exportPdf")
    public void exportPdf(String id) throws Exception {
        //a.查询数据
        //1、根据id查询报运单
        Export export = exportService.findById(id);
        //2、根据报运单id，查询商品列表 (exportId: 商品所属的报运单ID)
        ExportProductExample example = new ExportProductExample();
        ExportProductExample.Criteria criteria = example.createCriteria();
        criteria.andExportIdEqualTo(id);
        List<ExportProduct> list = exportProductService.findAll(example);
        //b.jasper生成pdf文件
        //1、加载模板路径
        String path = session.getServletContext().getRealPath("/")+"/jasper/export.jasper";
        //2、数据准备
        Map map =  BeanMapUtils.beanToMap(export);
        JRDataSource dataSource = new JRBeanCollectionDataSource(list);
        //3、JasperFillManager进行数据填充
        JasperPrint jasperPrint = JasperFillManager.fillReport(path, map, dataSource);
        //4、JapsperExportManager完成pdf文件导出（预览）
        JasperExportManager.exportReportToPdfStream(jasperPrint,response.getOutputStream());
    }


    /**
     * jasper数据填充
     *  传递：数据源类型的数据（list集合）
     *  目的：在pdf文件中进行数据列表的展示
     */
//    @RequestMapping("/exportPdf")
//    public void exportPdf() throws Exception {
//        //1、加载模板路径
//        String path = session.getServletContext().getRealPath("/")+"/jasper/test05.jasper";
//        //2、数据准备
//        Map map = new HashMap();
//        List<User> list = new ArrayList<>();
//        for (int i = 0; i < 5; i++) {
//            User user = new User();
//            user.setDeptName("部门"+i);
//            user.setUserName("用户"+i);
//            user.setEmail(i+"@itcast.cn");
//            user.setBirthday("2020-10-"+i);
//            list.add(user);
//        }
//        //JRDataSource dataSource = new JREmptyDataSource(); //空数据源对象
//        JRDataSource dataSource = new JRBeanCollectionDataSource(list);
//        //3、数据填充 模板路径，map集合，数据源JrDatasource
//        JasperPrint jasperPrint = JasperFillManager.fillReport(path, map, dataSource);
//        //4、预览(导出)
//        JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
//    }

    /**
     * jasper数据填充：
     *    map类型数据
     */
//    @RequestMapping("/exportPdf")
//    public void exportPdf() throws Exception {
//        //1、加载模板路径
//        String path = session.getServletContext().getRealPath("/")+"/jasper/test04.jasper";
//        //2、数据准备
//        Map map = new HashMap();
//        map.put("username", "张三1");
//        map.put("sex", "男");
//        map.put("age", 18);
//        JRDataSource dataSource = new JREmptyDataSource();
//        //3、数据填充 模板路径，map集合，数据源JrDatasource
//        JasperPrint jasperPrint = JasperFillManager.fillReport(path, map, dataSource);
//        //4、预览(导出)
//        JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
//    }

    /**
     * jasper的入门案例
     */
//    @RequestMapping("/exportPdf")
//    public void exportPdf() throws Exception {
//        //1、加载模板路径
//        String path = session.getServletContext().getRealPath("/")+"/jasper/test03.jasper";
//        //2、数据准备
//        Map map = new HashMap();
//        JRDataSource dataSource = new JREmptyDataSource();
//        //3、数据填充 模板路径，map集合，数据源JrDatasource
//        JasperPrint jasperPrint = JasperFillManager.fillReport(path, map, dataSource);
//        //4、预览(导出)
//        JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream());
//    }
}
